package com.imooc.oo

object ApplyApp {

  def main(args: Array[String]): Unit = {

//    for( i <- 1 to 10 ){
//      ApplyTest.incr
//    }
//
//    println(ApplyTest.count)

    // 如果 带有 括号 是带有 Object中的 apply
    val b = ApplyTest()

    // 类名() ==> Object.apply
    // 对象() ==> Class.apply

    val c = new ApplyTest()
    println(c)
    c()

  }

}


/**
  * 同名class是同名object的伴生类
  * 同名object是同名class的伴生对象
  */
class ApplyTest{

  def apply() = {
    println(" Class ApplyTest apply ... ")
  }

}

object ApplyTest{

  println(" Object ApplyTest enter ... ")

  var count = 0

  def incr = {
    count = count + 1
  }

  // 最佳实践: 在Object的apply方法中去new Class
  def apply():ApplyTest = {
    println(" Object ApplyTest apply ... ")

    new ApplyTest
  }

  println(" Object ApplyTest leave ... ")

}